Hello China是一个面向物联网应用的操作系统,即
物联网操作系统。该系统由
系统软件爱好者利用业余时间开发,主要面向基于x86 CPU的IBM兼容PC机和基于
ARM处理器的嵌入式平台,具备完全的自主知识产权,已发展到V1.77版本。该版本具备比较完善的
内核、文件系统(
FAT32/
NTFS)、
图形用户界面、
网络协议、模块化支持等功能。同时,该操作系统还具备支撑物联网应用的一些特有特性和机制,比如硬件建模能力,本地协同能力,物联网运平台抽象能力(与物联网后台系统
解耦),等等。
系统介绍
秉承模块化、高可靠、
快速响应的设计理念,Hello China具备可灵活裁减的模块化体系结构。可采用运行时配置和编译时配置两种方式,对操作
系统的
内核进行裁减和重组,以满足目标系统的应用。所谓运行时配置,是指通过一个配置文件(MODCFG.INI文件),告诉操作系统在启动时加载那些模块。凡是在配置文件中指明的模块,操作系统在启动时就会加载,否则不予加载。比如GUI模块、网络模块等,都可通过这种方式动态加载和卸载。另外一种配置方式是编译时配置,即通过配置内核源代码的编译选项,可以包含或踢出某些功能模块,比如文件系统模块、设备驱动程序模块、
虚拟内存管理模块等。这是一个两层次的模块化配置模式,可使得Hello China的
内核尺寸灵活变动,所占用的
资源也灵活伸缩,以适应特定的硬件结构。
Hello China的内核支持多线程、动态内存分配、完善的设备管理架构、完善的
线程同步机制等功能,支持
抢占式线程调度,支持基于向量的
硬件中断模型。其文件系统可支持
FAT32文件系统,支持
NTFS文件系统的读取功能。也可通过扩展支持其它文件系统,比如DCFS、基于iNode的Linux操作系统文件系统等。其GUI模块采取基于窗口和消息驱动的设计机制,提供了类Windows API的GUI
编程接口,对Windows API熟悉的应用程序开发人员可很容易的编写Hello China应用程序。其网络模块支持较为完善的
TCP/IP协议栈,但同时剔除了
TCP/IP协议中的一些相对较少用到的功能,比如带选项的IP、IP
报文分片等功能,以使得整个
协议栈紧凑可靠。当然,Hello China提供了完善的
设备驱动程序架构,可随时扩展驱动程序以增加其功能。
开发环境
Hello China V1.75版本及之前版本的核心模块,是在Visual
C++ 6.0开发环境下开发完成的。其引导模块和部分驱动程序,是用汇编语言开发,并使用NASM编译完成的。V1.75版本的Hello China,其
内核绝大部分是由C语言编写。据初步统计,核心模块的代码量为5万行。在PC上的引导程序,大致有500行左右的汇编代码。
为便于移植到非PC平台,后续版本的Hello China,将考虑移植到GCC开发环境上。但是Hello China的设计思路和应用编程接口,将保持不变。
Hello China的源代码完全公开,其下载地址,可从其官方blog时实获取(连接请参考“
扩展阅读”部分)。
开发接口
Hello China V1.75版本提供了上百个
系统调用,应用程序开发者可通过调用这些
系统服务,来开发基于Hello China的应用程序。在应用程序开发过程中,程序员只需要在程序源代码中包含Hello China提供的头文件(HCNKAPI.H),同时在连接的时候,把HCNLIB.LIB作为库文件即可,无需把全部Hello China源代码都包含到程序项目中。这与Windows和
Linux等
通用操作系统的开发过程类似,但是与传统的嵌入式操作系统开发模式不同。传统的嵌入式操作系统开发模式,一般是把操作系统的源代码也要包含到项目中。
应用程序代码与操作系统核心代码能够完全分离,是因为
系统调用机制的存在。系统调用机制虽然简化了应用程序开发过程,也使得操作系统与应用程序完全独立,但是却降低了系统执行效率。因为系统调用涉及到CPU执行上下文的切换等动作,消耗了一些不必要的CPU资源。Hello China也支持应用程序与操作系统“代码级集成”的开发机制,只要取消系统调用机制即可。这可提升系统整体运行效率。
Hello China提供的API接口,与Windows提供的
API函数有“几分相像”,这主要是为了便于程序员能够快速熟悉Hello China的开发过程。下面通过一个代码片断,说明这种相似性:
DWORD HCNMain(LPVOID pData)
{
//HANDLE hFrameWnd = (
HANDLE)pData; //pData is the handle of screen window,it is all application's parent window.
MSG msg;
HANDLE hMainFrame = NULL;
__WINDOW_MESSAGE wmsg;
//Create hello world's window.
hMainFrame = CreateWindow(WS_WITHBORDER | WS_WITHCAPTION,
150,
150,
600,
400,
StatWndProc,
NULL,//hFrameWnd,
NULL,
0x00FFFFFF,
NULL);
if(NULL == hMainFrame)
{
goto __TERMINAL;
}
//Message loop of this application.
while(TRUE)
{
if(GetMessage(&msg))
{
switch(msg.wCommand)
{
case KERNEL_MESSAGE_TIMER:
wmsg.hWnd = (HANDLE)msg.dwParam;
wmsg.message = WM_TIMER;
SendWindowMessage(wmsg.hWnd,&wmsg);
break;
case KERNEL_MESSAGE_WINDOW:
DispatchWindowMessage((__WINDOW_MESSAGE*)msg.dwParam);
break;
case KERNEL_MESSAGE_TERMINAL: //Post by PostQuitMessage.
goto __TERMINAL;
default:
break;
}
}
}
__TERMINAL:
if(hMainFrame)
{
DestroyWindow(hMainFrame);
}
return 0;
}
HCNMain函数与Windows的
WinMain函数相同,是整个应用程序的入口。在这个函数的开始处,首先调用
CreateWindow创建一个窗口,然后进入一个
消息循环。这个过程与Windows的编程机制类似。在创建窗口的时候,也需要指定一个
窗口函数,所有用户输入等的处理,都是在窗口函数中完成的。
当然,Hello China也支持完全字符模式的应用程序,这时候就无需创建窗口,但是必须有一个消息循环,如果你想要处理用户输入的话。当然,如果不处理任何输入,比如只打印出“Hello world”,则无需消息循环,只需要一个HCNMain函数即可。
应用场景
Hello China定位于高端智能嵌入式应用,其应用场景非常广泛。比如,传统的基于PC系统的固定应用,比如
LCD显示器控制、银行ATM机、
刷卡机等,都可以基于Hello China重新开发应用,而这种应用场景上的应用程序,以前都是基于Windows开发的。切换到Hello China以后,可大大降低成本,同时避免Windows系统的被侵入风险。
在云计算如火如荼的今天,
云终端将是云计算基础架构的制胜环节,而云终端操作系统也是Hello China的应用领域。实际上,Hello China的V2.0版本(正在开发中),就是针对云终端进行定制开发的。该版本集成
RDP协议功能,可通过
远程桌面连接到
云服务器,作为轻量级的云终端。这对云服务运营商来说,将是一个增加用户黏性、提升整体竞争力的
整体解决方案。
另外的一个应用是物联网的
感知层控制终端,即
物联网操作系统,这是Hello China操作系统后续主要面向的场景。与传统的
个人计算机或个人
智能终端(智能手机、平板电脑等)上的操作系统不同,物联网操作系统有其独特的特征。这些特征是为了更好的服务物联网应用而存在的,运行物联网操作系统的终端设备,能够与物联网的其它层次结合的更加紧密,
数据共享更加顺畅,能够大大提升物联网的生产效率。一些典型的物联网设备或个人
消费电子设备,比如智能手环,物联网协议转换网关(比如把蓝牙转换为IP),
监控摄像头,各类传感器等,都可以运行Hello China操作系统。
最新进展
为了更好的体现”
物联网操作系统“的特征,更加聚焦物联网领域应用,”Hello China操作系统“已于2014年下半年,正式更名为”HelloX操作系统“。HelloX中的X可以代表任何东西。这样就貌似有点打招呼的意思,比如“Hello,car”,“Hello,ring”…,通过这个操作系统,你能够跟任何东西对话,符合物联网的含义。英文的口号是“HelloX,through which you can talk to everything.”。
除了更名之外,在2014年,Hello China操作系统发布了最新的V1.77版本,增加了很多特性,比如:
1. 成功移植到基于Cortex M3的STM32 MCU上,在多块开发板上进行了测试,性能稳定;
2. 成功完成
lwIP协议栈到HelloX的移植,具备了完善的网络功能;
3. 成功完成一个WiFi协议栈(MR09)和有线以太网协议栈的移植,能够动态获取IP地址,并访问外网服务器;
4. 基于PC的版本,也成功移植到VS2010等开发环境上,并完善和增加了文件系统/GUI/可加载模块等功能,基本上就是一个功能完备的个人计算机操作系统了。
后续将聚焦物联网领域应用,进行进一步的开发。